From 47cf584883df7caf997b51eed15a84ae5a7ce324 Mon Sep 17 00:00:00 2001 From: Kaixing Hong Date: Fri, 17 Feb 2012 15:14:25 +0800 Subject: [PATCH] x86/mm: Make sure the event channel is released accurately In xenpaging source code,there is an interdomain communication between dom0 and domU. In mem_event_enable(),the function alloc_unbound_xen_event_channel() allocates a free port for domU, and then it will be bound with dom0. When xenpaging tears down,it just frees dom0's event channel port by xc_evtchn_unbind(), leaves domU's port still occupied. So we add the patch to free domU's port when xenpaging exits. We need double free interdomain eventchannel. First free domainU port, and leave domain 0 port unbond, Then free domain 0 port. Signed-off-by: Kaixing Hong , Signed-off-by: Zhen Shi Acked-by: Olaf Hering Committed-by: Tim Deegan --- xen/arch/x86/mm/mem_event.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xen/arch/x86/mm/mem_event.c b/xen/arch/x86/mm/mem_event.c index 3b2267adfb..35bfedd832 100644 --- a/xen/arch/x86/mm/mem_event.c +++ b/xen/arch/x86/mm/mem_event.c @@ -243,6 +243,9 @@ static int mem_event_disable(struct domain *d, struct mem_event_domain *med) return -EBUSY; } + /* Free domU's event channel and leave the other one unbound */ + free_xen_event_channel(d->vcpu[0], med->xen_port); + unmap_domain_page(med->ring_page); med->ring_page = NULL; -- 2.30.2